package com.cheejee.goodscenter.service;

import java.util.List;

import javax.validation.constraints.NotNull;

import org.springframework.validation.annotation.Validated;

import com.cheejee.goodscenter.module.dto.SkuDto;
import com.cheejee.goodscenter.module.entity.Sku;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;

/**
 * @author CARRY
 * @Date 2020年10月28日下午10:03:55
 */
@Validated
public interface SkuService {
	
	Sku querySkuById(@NotNull(message = "SKU ID不能为空")Long id);
	
	
	SkuDto querySkuInfoById(@NotNull(message = "SKU ID不能为空")Long id);
	
	/**
	 * 按条件查询SKU，多个条件and连接
	 *
	 * @param goodsId
	 * @param goodsSpecificIdGroup
	 * @param isOn
	 * @return
	 */
	Page<Sku> querySku(Long goodsId, String goodsSpecificIdGroup, Boolean isOn, int pageNum, int pageSize);
	
	PageInfo<SkuDto> querySkuDto(Long goodsId, String goodsSpecificIdGroup, Boolean isOn, int pageNum, int pageSize);

	/**
	 * 同商品下SKU规格组合不能重复，包含数据库SKU.
	 * 同时新增SKU属性
	 *
	 * @param sku
	 * @return
	 */
	int addSku(Long goodsId, List<SkuDto> sku);
	
	
	/**
	 * 1. 修改某商品的SKU，会更新SKU的属性。不能添加相同规格组合的SKU。
	 * 2. 传入空list则会删除商品的所有SKU。
	 * 3. 如果SKU没有ID则新增，有ID则更新，和数据库商品SKU比对，如果SKU列表中不存在数据库存在的SKU会进行删除。
	 * 
	 *
	 * @param goodsId
	 * @param sku
	 * @return
	 */
	int changeGoodsSku(Long goodsId, List<SkuDto> sku);
	
	int changeSku(Sku sku);
	
	/**
	 * 更新SKU和SKU的属性
	 *
	 * @param goodsId
	 * @param sku
	 * @return
	 */
	int changeSkuinfo(Long goodsId, SkuDto sku);
	
	int deleteSku(@NotNull(message = "删除的SKU ID不能为空")Long...id);
}
